package com.briup.day09;

/**
 * 父类
 * @author lining
 * @date 2024/1/18 14:23
 */
public abstract class Animal {//动物 一种多种XXX的抽象的分类概念。
    public String name;
    public int age;
    public Animal(){

    }
    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //进行相同活动和进食工作行为
    //抽象方法 必须用来被所有继承子类进行实现
    public abstract void run();
        //因为每个动物逻辑不同的，没有共同的实现逻辑。

    public abstract void eat();


    public static void main(String[] args) {
        //使用多态写法：创建了3个动物对象
        Animal a = new Dog("狗",10);
        Animal b = new Bird("鸟",3);
        Animal c = new Fish("鱼",1);
        //2.调用方法：编译看左边 运行看右边
        a.run();
        b.run();
        c.run();
        // 1.抽象类不能创建对象 ，抽象类主要用来被继承
//        Animal d = new Animal("狗", 3);

    }
}
//新增一个猫的动物类型
class Cat extends Animal{
    //普通类继承抽象类，必须实现抽象类中所有的抽象方法
    public void run(){
        System.out.println("猫在树上活动");
    }

    @Override
    public void eat() {
        System.out.println("猫吃鱼");
    }

    public Cat(String name, int age) {
        super(name, age);
    }
}

class Dog extends Animal{
    public Dog(String name,int age) {
       super(name,age);
    }
    public void run(){
        System.out.println("在地面奔跑");
    }

    @Override
    public void eat() {

    }
}
class Fish extends Animal{
    public Fish(String name,int age) {
        super(name, age);
    }
    public void run(){
        System.out.println("在水里游动");
    }

    @Override
    public void eat() {

    }
}
class Bird extends Animal{
    public Bird(String name,int age) {
        super(name, age);
    }
    @Override
    public void eat(){
        //每个父类中抽象方法都被重写。实现抽象方法
        System.out.println("鸟吃虫");
    }
    public void run(){
        System.out.println("在天空飞行");
    }
}